iT邦幫忙

2025 iThome 鐵人賽

DAY 19
0
DevOps

DevOps 進化論:從全能型戰士到安全守門員系列 第 19

Day 19 : Terraform × Helm : 與 CI/CD 的無縫串接

  • 分享至 

  • xImage
  •  

●前言

在 Day 17~18,我們已經完成了兩大基礎:

🔸Terraform:自動化建立基礎架構(VPC / K8s Cluster / Namespace)。

🔸Helm:將應用程式打包成 Chart,讓部署可參數化、可重複。

今天,我們要把這些元件拉進 CI/CD管線,實現完整的DevOps範例:

🔸PR → Plan(預覽部署)

🔸Merge → Apply(部署)

🔸自動 Smoke Test(服務可用性檢查)

🔸出包可一鍵 Rollback(Helm / Git)

●核心觀念:

1.IaC 一條龍:Terraform 與 Helm 都要走流水線,避免「手動 apply」的落差。

2.環境隔離:dev/staging/prod 使用不同 tfvars/values.yaml,避免污染。

3.狀態與密鑰管理:Remote State(S3/GCS/Blob 或 Terraform Cloud)+ Secrets/OIDC 取代硬寫金鑰。

●實作步驟

1.啟動Minikube

minikube start
kubectl config current-context   # 確認是 minikube

2.準備所需檔案

▪ 專案結構:

https://ithelp.ithome.com.tw/upload/images/20250901/20178156aT3rTA9EOX.png

3.Helm檢查語法與預渲染

helm lint charts/app
helm template hello charts/app \
  -f charts/app/values.yaml \
  -f charts/app/values.dev.yaml

👉 確保 Chart 本身能正確渲染,不會生成壞掉的 YAML。

4.Terraform 初始化 & 部署

terraform -chdir=deploy/terraform init
terraform -chdir=deploy/terraform plan -var-file=envs/dev.tfvars
terraform -chdir=deploy/terraform apply -auto-approve -var-file=envs/dev.tfvars

5.驗證部署結果

kubectl -n demo get pods,svc
kubectl -n demo port-forward svc/hello-app-app 8080:80

https://ithelp.ithome.com.tw/upload/images/20250901/20178156qoiyKuP2rZ.png

👉 瀏覽 http://localhost:8080

https://ithelp.ithome.com.tw/upload/images/20250901/20178156iob2xruWMJ.png

6.CI/CD 串接

▪ CI(Pull Request 驗證)

🔸helm lint/template:擋掉語法錯誤

🔸terraform fmt/validate/plan:確保 IaC 健康

🔸PR 階段僅「預演」,不會真的部署

▪ CD(主線自動部署)

🔸push 到 main → Actions 啟動

🔸在 pipeline 裡起一個 kind cluster → terraform apply

🔸自動佈署 Helm Release

🔸佈署後跑 Smoke Test(等 Pod ready)

▪回滾

🔸Helm rollback:快速回到上個版本

🔸Git revert + terraform apply:IaC 保證狀態一致

7.Smoke Test

🔎部署後立即檢查:

kubectl -n demo rollout status deploy/hello-app-app --timeout=120s
kubectl -n demo get svc hello-app-app

✅ 確保服務可用,CI/CD pipeline 才算通過。

●總結

今天我們把 Terraform + Helm 拉進 CI/CD,形成完整閉環:

🔸IaC 一條龍 → 基礎建設與應用都版本控

🔸自動化驗證 → Lint、Template、Plan、Smoke Test

🔸環境隔離 → dev/staging/prod 配置檔分離

🔸快速回滾 → Helm rollback 或 Git revert

這就是從 基礎設施層(Terraform) 到 應用部署層(Helm) 的「無縫串接」。

👉下一篇 : Day 20 | Observability 全面監控:Prometheus × Grafana × ELK


上一篇
Day 18 : 從 Terraform 到 Helm:IaC 的雙核心
系列文
DevOps 進化論:從全能型戰士到安全守門員19
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言